{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-aspera-core",
      "artifactVersion": "2021.7.1",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "com.nuxeo.aspera.connector.nuxeo-aspera-core",
          "nuxeo-aspera-web",
          "org.nuxeo.ecm.restapi.jaxrs.aspera"
        ],
        "hierarchyPath": "/grp:com.nuxeo.aspera.connector",
        "id": "grp:com.nuxeo.aspera.connector",
        "name": "com.nuxeo.aspera.connector",
        "parentIds": [],
        "readmes": [
          {
            "blobProviderId": "default",
            "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=aspera%2Fnuxeo-aspera-connector%2Flts-2021)](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector/job/lts-2021/)\n# Nuxeo Aspera Connector\n\nThe Nuxeo Aspera connector enables users to upload/download binaries with the Aspera Connect client.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/n/Kvd)\n\n## Context\n\nNuxeo Aspera Connector is an addon that can be plugged to Nuxeo.\nThis repository contains the backend and frontend contributions for the [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\nNuxeo Aspera Connector code is bundled as a [marketplace package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) that includes all the backend and frontend contributions.\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Nuxeo Aspera Connector pipeline\n- **nuxeo-aspera-core**: Backend contribution for Nuxeo Platform\n- **nuxeo-aspera-package**: Builder for [nuxeo-aspera](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) marketplace package. This package will install all the necessary mechanisms to integrate Aspera Connector capabilities into Nuxeo\n- **nuxeo-aspera-rest**: REST APIs\n- **nuxeo-aspera-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip`_ file for the package.\n\n### Frontend Contributions\n\n`nuxeo-aspera-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional tests\n\nTo test Aspera functionality we use `nuxeo-web-ui-ftest` helpers. To run them, we use the command: \n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.1.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v14`.\n\n## Developer Workflow\n\n### Backend\n\n```shell script\nmvn clean install\n```\n\nThat will generate an aspera zip file in the target area, which you can manually install in your server instance.\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Aspera Management UI, it is assumed that there is a Nuxeo server running with Nuxeo Aspera Management package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui#readme).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\nNot being perfect, the suggested way of integration is to create a _symlink_ inside addons folder, under your checkout of Web UI repo and then serve it with `nuxeo-aspera` package/addon.\n\n***Creating the Symlink***\n\n```shell script\ncd ${yourWebUiCheckout}/addons\nln -s ~/${yourAsperaManagementCheckout}/nuxeo-aspera/nuxeo-aspera-web nuxeo-aspera\n```\n\n***Serving Web UI with Aspera Management***\n\n```shell script\nNUXEO_PACKAGES=\"nuxeo-aspera\" npm run start\n```\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Aspera Connector integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector) for each reference branch, and also for each opened PR.\n\nThe following features are available:\n\n- Possibility of having a dedicated preview environment for a PR by using the tag GitHub PR tag `preview`\n- Each PR merge to reference branch will generate a \"release candidate\" package\n\n### Localization Management\n\nTranslations are managed with [Crowdin](https://crowdin.com/).\n\nThe reference file [message.json](./nuxeo-aspera-web/i18n/messages.json) contains the labels and the English values.\n\nTranslations for other languages are managed in the [nuxeo-aspera](https://crowdin.com/project/nuxeo-aspera) Crowdin project, e.g. [French](https://crowdin.com/translate/nuxeo-aspera/4/en-fr).\n\nThe Crowdin GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
            "digest": "3ccdae4ac085aaa2ecfd225806b81b71",
            "encoding": "UTF-8",
            "length": 7878,
            "mimeType": "text/plain",
            "name": "README.md"
          }
        ],
        "version": "2021.58"
      },
      "bundleId": "com.nuxeo.aspera.connector.nuxeo-aspera-core",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--operations",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.operations/Contributions/com.nuxeo.aspera.connector.operations--operations",
              "id": "com.nuxeo.aspera.connector.operations--operations",
              "registrationOrder": 3,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"com.nuxeo.aspera.connector.operations.InitBatchUpload\"/>\n    <operation class=\"com.nuxeo.aspera.connector.operations.GetChildrenBlobs\"/>\n    <operation class=\"com.nuxeo.aspera.connector.operations.AsperaPageProvider\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.operations",
          "name": "com.nuxeo.aspera.connector.operations",
          "requirements": [],
          "resolutionOrder": 51,
          "services": [],
          "startOrder": 19,
          "version": "2021.7.1",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.aspera.connector.operations\" version=\"1.0\">\n\n  <extension point=\"operations\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <operation class=\"com.nuxeo.aspera.connector.operations.InitBatchUpload\" />\n    <operation class=\"com.nuxeo.aspera.connector.operations.GetChildrenBlobs\" />\n    <operation class=\"com.nuxeo.aspera.connector.operations.AsperaPageProvider\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-operations-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "componentClass": "com.nuxeo.aspera.connector.service.AsperaServiceImpl",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.services",
          "name": "com.nuxeo.aspera.connector.services",
          "requirements": [],
          "resolutionOrder": 52,
          "services": [
            {
              "@type": "NXService",
              "componentId": "com.nuxeo.aspera.connector.services",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.services/Services/com.nuxeo.aspera.connector.service.AsperaService",
              "id": "com.nuxeo.aspera.connector.service.AsperaService",
              "overriden": false,
              "version": "2021.7.1"
            }
          ],
          "startOrder": 22,
          "version": "2021.7.1",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"com.nuxeo.aspera.connector.services\">\n  <implementation class=\"com.nuxeo.aspera.connector.service.AsperaServiceImpl\"/>\n  <service>\n    <provide interface=\"com.nuxeo.aspera.connector.service.AsperaService\"/>\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-services-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "componentClass": "com.nuxeo.aspera.connector.service.AsperaNodeServiceImpl",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.service.asperanode",
          "name": "com.nuxeo.aspera.connector.service.asperanode",
          "requirements": [],
          "resolutionOrder": 53,
          "services": [
            {
              "@type": "NXService",
              "componentId": "com.nuxeo.aspera.connector.service.asperanode",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.service.asperanode/Services/com.nuxeo.aspera.connector.service.AsperaNodeService",
              "id": "com.nuxeo.aspera.connector.service.AsperaNodeService",
              "overriden": false,
              "version": "2021.7.1"
            }
          ],
          "startOrder": 21,
          "version": "2021.7.1",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"com.nuxeo.aspera.connector.service.asperanode\">\n  <implementation class=\"com.nuxeo.aspera.connector.service.AsperaNodeServiceImpl\"/>\n  <service>\n    <provide interface=\"com.nuxeo.aspera.connector.service.AsperaNodeService\"/>\n  </service>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-node-service-contrib.xml",
          "xmlPureComponent": false
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.io.MarshallerRegistry--marshallers",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.marshallers/Contributions/com.nuxeo.aspera.connector.marshallers--marshallers",
              "id": "com.nuxeo.aspera.connector.marshallers--marshallers",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.io.MarshallerRegistry",
                "name": "org.nuxeo.ecm.core.io.MarshallerRegistry",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"marshallers\" target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\">\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferRequestReader\" enable=\"true\"/>\n    <register class=\"com.nuxeo.aspera.connector.api.marshaller.TransferEnricher\" enable=\"true\"/>\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaCreateTransferRequestReader\" enable=\"true\"/>\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferFilesReader\" enable=\"true\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.marshallers",
          "name": "com.nuxeo.aspera.connector.marshallers",
          "requirements": [],
          "resolutionOrder": 54,
          "services": [],
          "startOrder": 18,
          "version": "2021.7.1",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.aspera.connector.marshallers\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.ecm.core.io.MarshallerRegistry\" point=\"marshallers\">\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferRequestReader\" enable=\"true\" />\n    <register class=\"com.nuxeo.aspera.connector.api.marshaller.TransferEnricher\" enable=\"true\" />\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaCreateTransferRequestReader\" enable=\"true\" />\n    <register class=\"com.nuxeo.aspera.connector.api.entities.AsperaTransferFilesReader\" enable=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-marshallers-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.query.api.PageProviderService--providers",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.pageproviders.contrib/Contributions/com.nuxeo.aspera.connector.pageproviders.contrib--providers",
              "id": "com.nuxeo.aspera.connector.pageproviders.contrib--providers",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.query.api.PageProviderService",
                "name": "org.nuxeo.ecm.platform.query.api.PageProviderService",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"providers\" target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\">\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"aspera_folderish_suggestion\">\n      <pattern escapeParameters=\"true\" quoteParameters=\"false\">\n        SELECT * FROM Document WHERE ecm:fulltext LIKE '?*' AND ecm:mixinType = 'Folderish'\n        AND ecm:mixinType NOT IN ('SystemDocument', 'HiddenInNavigation') AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n    </genericPageProvider>\n    <genericPageProvider class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\" name=\"aspera_transfers_list\">\n      <whereClause docType=\"AsperaSearch\">\n        <fixedPart>\n          ecm:primaryType IN ('Transfer')\n          AND ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"ecm_currentLifeCycleState_agg\" parameter=\"ecm:currentLifeCycleState\" type=\"terms\">\n          <field name=\"ecm_currentLifeCycleState_agg\" schema=\"aspera_search\"/>\n        </aggregate>\n      </aggregates>\n      <sort ascending=\"false\" column=\"dc:modified\"/>\n      <quickFilters>\n        <quickFilter name=\"download\">\n          <clause>ca:type = 'download'</clause>\n        </quickFilter>\n        <quickFilter name=\"upload\">\n          <clause>ca:type = 'upload'</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.pageproviders.contrib",
          "name": "com.nuxeo.aspera.connector.pageproviders.contrib",
          "requirements": [],
          "resolutionOrder": 55,
          "services": [],
          "startOrder": 20,
          "version": "2021.7.1",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"com.nuxeo.aspera.connector.pageproviders.contrib\">\n  <extension target=\"org.nuxeo.ecm.platform.query.api.PageProviderService\" point=\"providers\">\n    <genericPageProvider name=\"aspera_folderish_suggestion\" class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <pattern quoteParameters=\"false\" escapeParameters=\"true\">\n        SELECT * FROM Document WHERE ecm:fulltext LIKE '?*' AND ecm:mixinType = 'Folderish'\n        AND ecm:mixinType NOT IN ('SystemDocument', 'HiddenInNavigation') AND ecm:isVersion = 0 AND ecm:isTrashed = 0\n      </pattern>\n    </genericPageProvider>\n    <genericPageProvider name=\"aspera_transfers_list\" class=\"org.nuxeo.elasticsearch.provider.ElasticSearchNxqlPageProvider\">\n      <whereClause docType=\"AsperaSearch\">\n        <fixedPart>\n          ecm:primaryType IN ('Transfer')\n          AND ecm:isVersion = 0\n          AND ecm:isTrashed = 0\n        </fixedPart>\n      </whereClause>\n      <aggregates>\n        <aggregate id=\"ecm_currentLifeCycleState_agg\" type=\"terms\" parameter=\"ecm:currentLifeCycleState\">\n          <field schema=\"aspera_search\" name=\"ecm_currentLifeCycleState_agg\" />\n        </aggregate>\n      </aggregates>\n      <sort column=\"dc:modified\" ascending=\"false\" />\n      <quickFilters>\n        <quickFilter name=\"download\">\n          <clause>ca:type = 'download'</clause>\n        </quickFilter>\n        <quickFilter name=\"upload\">\n          <clause>ca:type = 'upload'</clause>\n        </quickFilter>\n      </quickFilters>\n      <pageSize>10</pageSize>\n    </genericPageProvider>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-pageproviders.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--schema",
              "id": "com.nuxeo.aspera.connector.doctypes--schema",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"common-aspera\" prefix=\"ca\" src=\"schemas/common-aspera.xsd\"/>\n    <schema name=\"aspera_search\" src=\"schemas/aspera_search.xsd\"/>\n    <schema name=\"transfer-dc\" prefix=\"tdc\" src=\"schemas/transfer-dc.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--doctype",
              "id": "com.nuxeo.aspera.connector.doctypes--doctype",
              "registrationOrder": 2,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n\n    <doctype extends=\"File\" name=\"Transfer\">\n      <schema name=\"common-aspera\"/>\n      <schema name=\"transfer-dc\"/>\n      <facet name=\"HiddenInNavigation\"/>\n    </doctype>\n\n    <doctype name=\"AsperaSearch\">\n      <schema name=\"aspera_search\"/>\n    </doctype>\n\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--types",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--types",
              "id": "com.nuxeo.aspera.connector.doctypes--types",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"types\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <types>\n      <type name=\"Transfer\">transfer_lifecyle</type>\n    </types>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.lifecycle.LifeCycleService--lifecycle",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--lifecycle",
              "id": "com.nuxeo.aspera.connector.doctypes--lifecycle",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "name": "org.nuxeo.ecm.core.lifecycle.LifeCycleService",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"lifecycle\" target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\">\n    <lifecycle defaultInitial=\"draft\" name=\"transfer_lifecyle\">\n      <transitions>\n        <transition destinationState=\"started\" name=\"to_started\">\n          <description/>\n        </transition>\n        <transition destinationState=\"pending\" name=\"to_pending\">\n          <description/>\n        </transition>\n        <transition destinationState=\"completed\" name=\"to_completed\">\n          <description/>\n        </transition>\n        <transition destinationState=\"failed\" name=\"to_failed\">\n          <description/>\n        </transition>\n      </transitions>\n      <states>\n        <state description=\"When the transfer is not started - can be modified\" initial=\"true\" name=\"draft\">\n          <transitions>\n            <transition>to_started</transition>\n          </transitions>\n        </state>\n        <state description=\"When the transfer started (no files uploaded yet) - cannot be modified\" name=\"started\">\n          <transitions>\n            <transition>to_started</transition>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n        <state description=\"When the transfer started to have files uploaded - cannot be modified\" name=\"pending\">\n          <transitions>\n            <transition>to_failed</transition>\n            <transition>to_completed</transition>\n          </transitions>\n        </state>\n        <state description=\"When the transfer is completed - cannot be modified\" name=\"completed\">\n          <transitions>\n\n          </transitions>\n        </state>\n        <state description=\"When the transfer is completed but some files failed - can be modified\" name=\"failed\">\n          <transitions>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.api.DocumentAdapterService--adapters",
              "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes/Contributions/com.nuxeo.aspera.connector.doctypes--adapters",
              "id": "com.nuxeo.aspera.connector.doctypes--adapters",
              "registrationOrder": 1,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.api.DocumentAdapterService",
                "name": "org.nuxeo.ecm.core.api.DocumentAdapterService",
                "type": "service"
              },
              "version": "2021.7.1",
              "xml": "<extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"com.nuxeo.aspera.connector.adapter.Transfer\" factory=\"com.nuxeo.aspera.connector.adapter.AdaptersFactory\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core/com.nuxeo.aspera.connector.doctypes",
          "name": "com.nuxeo.aspera.connector.doctypes",
          "requirements": [
            "org.nuxeo.ecm.core.CoreExtensions"
          ],
          "resolutionOrder": 86,
          "services": [],
          "startOrder": 17,
          "version": "2021.7.1",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<component name=\"com.nuxeo.aspera.connector.doctypes\">\n\n  <require>org.nuxeo.ecm.core.CoreExtensions</require>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"common-aspera\" src=\"schemas/common-aspera.xsd\" prefix=\"ca\" />\n    <schema name=\"aspera_search\" src=\"schemas/aspera_search.xsd\" />\n    <schema name=\"transfer-dc\" src=\"schemas/transfer-dc.xsd\" prefix=\"tdc\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n\n    <doctype name=\"Transfer\" extends=\"File\">\n      <schema name=\"common-aspera\" />\n      <schema name=\"transfer-dc\" />\n      <facet name=\"HiddenInNavigation\" />\n    </doctype>\n\n    <doctype name=\"AsperaSearch\">\n      <schema name=\"aspera_search\" />\n    </doctype>\n\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"types\">\n    <types>\n      <type name=\"Transfer\">transfer_lifecyle</type>\n    </types>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.lifecycle.LifeCycleService\" point=\"lifecycle\">\n    <lifecycle name=\"transfer_lifecyle\" defaultInitial=\"draft\">\n      <transitions>\n        <transition name=\"to_started\" destinationState=\"started\">\n          <description />\n        </transition>\n        <transition name=\"to_pending\" destinationState=\"pending\">\n          <description />\n        </transition>\n        <transition name=\"to_completed\" destinationState=\"completed\">\n          <description />\n        </transition>\n        <transition name=\"to_failed\" destinationState=\"failed\">\n          <description />\n        </transition>\n      </transitions>\n      <states>\n        <state name=\"draft\" description=\"When the transfer is not started - can be modified\" initial=\"true\">\n          <transitions>\n            <transition>to_started</transition>\n          </transitions>\n        </state>\n        <state name=\"started\" description=\"When the transfer started (no files uploaded yet) - cannot be modified\">\n          <transitions>\n            <transition>to_started</transition>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n        <state name=\"pending\" description=\"When the transfer started to have files uploaded - cannot be modified\">\n          <transitions>\n            <transition>to_failed</transition>\n            <transition>to_completed</transition>\n          </transitions>\n        </state>\n        <state name=\"completed\" description=\"When the transfer is completed - cannot be modified\">\n          <transitions>\n\n          </transitions>\n        </state>\n        <state name=\"failed\" description=\"When the transfer is completed but some files failed - can be modified\">\n          <transitions>\n            <transition>to_pending</transition>\n          </transitions>\n        </state>\n      </states>\n    </lifecycle>\n  </extension>\n\n  <extension point=\"adapters\" target=\"org.nuxeo.ecm.core.api.DocumentAdapterService\">\n    <adapter class=\"com.nuxeo.aspera.connector.adapter.Transfer\"\n             factory=\"com.nuxeo.aspera.connector.adapter.AdaptersFactory\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/aspera-doctypes.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-aspera-core-2021.7.1.jar",
      "groupId": "com.nuxeo.aspera.connector",
      "hierarchyPath": "/grp:com.nuxeo.aspera.connector/com.nuxeo.aspera.connector.nuxeo-aspera-core",
      "id": "com.nuxeo.aspera.connector.nuxeo-aspera-core",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: root\r\nBuild-Jdk: 11.0.22\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: Nuxeo\r\nBundle-Name: nuxeo-aspera-core\r\nBundle-SymbolicName: com.nuxeo.aspera.connector.nuxeo-aspera-core;sing\r\n leton=true\r\nNuxeo-Component: OSGI-INF/aspera-operations-contrib.xml, OSGI-INF/aspe\r\n ra-doctypes.xml, OSGI-INF/aspera-services-contrib.xml, OSGI-INF/asper\r\n a-node-service-contrib.xml, OSGI-INF/aspera-marshallers-contrib.xml, \r\n OSGI-INF/aspera-pageproviders.xml\r\n\r\n",
      "maxResolutionOrder": 86,
      "minResolutionOrder": 51,
      "packages": [
        "nuxeo-aspera"
      ],
      "parentReadme": {
        "blobProviderId": "default",
        "content": "[![Build Status](https://jenkins.platform.dev.nuxeo.com/buildStatus/icon?job=aspera%2Fnuxeo-aspera-connector%2Flts-2021)](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector/job/lts-2021/)\n# Nuxeo Aspera Connector\n\nThe Nuxeo Aspera connector enables users to upload/download binaries with the Aspera Connect client.\n\nFor more details around functionalities, requirements, installation and usage please consider this addon [official documentation](https://doc.nuxeo.com/n/Kvd)\n\n## Context\n\nNuxeo Aspera Connector is an addon that can be plugged to Nuxeo.\nThis repository contains the backend and frontend contributions for the [Nuxeo Platform](https://github.com/nuxeo/nuxeo) and [Nuxeo Web UI](https://github.com/nuxeo/nuxeo-web-ui).\n\nNuxeo Aspera Connector code is bundled as a [marketplace package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) that includes all the backend and frontend contributions.\n\n## Sub Modules Organization\n\n- **ci**: CI/CD files and configurations responsible to generate preview environments and running Nuxeo Aspera Connector pipeline\n- **nuxeo-aspera-core**: Backend contribution for Nuxeo Platform\n- **nuxeo-aspera-package**: Builder for [nuxeo-aspera](https://connect.nuxeo.com/nuxeo/site/marketplace/package/nuxeo-aspera) marketplace package. This package will install all the necessary mechanisms to integrate Aspera Connector capabilities into Nuxeo\n- **nuxeo-aspera-rest**: REST APIs\n- **nuxeo-aspera-web**: Frontend contribution for Nuxeo Web UI\n\n## Build\n\nNuxeo's ecosystem is Java based and uses Maven. This addon is not an exception and can be built by simply performing:\n\n```shell script\nmvn clean install\n```\n\nThis will build all the modules except _ci_ and generate the correspondent artifacts: _`.jar`_ files for the contributions, and a _`.zip`_ file for the package.\n\n### Frontend Contributions\n\n`nuxeo-aspera-web` module is also generating a _`.jar`_ file containing all the artifacts needed for an integration with Nuxeo's ecosystem.\nNevertheless this contribution is basically generating an ES Module ready for being integrated with Nuxeo Web UI.\n\nIt is possible to isolate this part of the build by running the following command:\n\n```shell script\nnpm run build\n```\n\nIt is using [rollup.js](https://rollupjs.org/guide/en/) to build, optimize and minify the code, making it ready for deployment.\n\n## Test\n\nIn a similar way to what was written above about the building process, it is possible to run tests against each one of the modules.\n\nHere, despite being under the same ecosystem, the contributions use different approaches.\n\n### Backend Contribution\n\n#### Unit Tests\n\n```shell script\nmvn test\n```\n\n### Frontend Contribution\n\n#### Unit Tests\n\n```shell script\nnpm run test\n```\n\n[Web Test Runner](https://modern-web.dev/docs/test-runner/overview/) is the test runner used to run this contribution unit tests.\nThe tests run against bundled versions of Chromium, Firefox and Webkit, using [Playwright](https://www.npmjs.com/package/playwright)\n\n#### Functional tests\n\nTo test Aspera functionality we use `nuxeo-web-ui-ftest` helpers. To run them, we use the command: \n\n```shell script\nnpm run ftest\n```\n\nTo run the functional tests, [Nuxeo Web UI Functional Testing Framework](https://github.com/nuxeo/nuxeo-web-ui/tree/maintenance-3.1.x/packages/nuxeo-web-ui-ftest) is used.\nDue to its inner dependencies, it only works using NodeJS `lts/dubnium`, i.e., `v14`.\n\n## Developer Workflow\n\n### Backend\n\n```shell script\nmvn clean install\n```\n\nThat will generate an aspera zip file in the target area, which you can manually install in your server instance.\n\n### Frontend\n\n*Disclaimer:* In order to contribute and develop Nuxeo Aspera Management UI, it is assumed that there is a Nuxeo server running with Nuxeo Aspera Management package installed and properly configured according the documentation above.\n\n#### Install Dependencies  \n\n```sh\nnpm install\n```\n\n#### Linting & Code Style\n\nThe UI contribution has linting to help making the code simpler and safer.\n\n```sh\nnpm run lint\n```\n\nTo help on code style and formatting the following command is available. \n\n```sh\nnpm run format\n```\n\nBoth `lint` and `format` commands run automatically before performing a commit in order to help us keeping the code base consistent with the rules defined.\n\n#### Integration with Web UI\n\nDespite being an \"independent\" project, this frontend contribution is build and aims to run as part of Nuxeo Web UI. So, most of the development will be done under that context.\nTo have the best experience possible, it is recommended to follow the `Web UI Development workflow` on [repository's README](https://github.com/nuxeo/nuxeo-web-ui#readme).\n\nSince it already contemplates the possibility of integrating packages/addons, it is possible to serve it with `NUXEO_PACKAGES` environment variable pointing to the desired packages/addons.\n\nNot being perfect, the suggested way of integration is to create a _symlink_ inside addons folder, under your checkout of Web UI repo and then serve it with `nuxeo-aspera` package/addon.\n\n***Creating the Symlink***\n\n```shell script\ncd ${yourWebUiCheckout}/addons\nln -s ~/${yourAsperaManagementCheckout}/nuxeo-aspera/nuxeo-aspera-web nuxeo-aspera\n```\n\n***Serving Web UI with Aspera Management***\n\n```shell script\nNUXEO_PACKAGES=\"nuxeo-aspera\" npm run start\n```\n\n## CI/CD\n\nContinuous Integration & Continuous Deployment(and Delivery) are an important part of the development process.\n\nNuxeo Aspera Connector integrates [Jenkins pipelines](https://jenkins.platform.dev.nuxeo.com/job/aspera/job/nuxeo-aspera-connector) for each reference branch, and also for each opened PR.\n\nThe following features are available:\n\n- Possibility of having a dedicated preview environment for a PR by using the tag GitHub PR tag `preview`\n- Each PR merge to reference branch will generate a \"release candidate\" package\n\n### Localization Management\n\nTranslations are managed with [Crowdin](https://crowdin.com/).\n\nThe reference file [message.json](./nuxeo-aspera-web/i18n/messages.json) contains the labels and the English values.\n\nTranslations for other languages are managed in the [nuxeo-aspera](https://crowdin.com/project/nuxeo-aspera) Crowdin project, e.g. [French](https://crowdin.com/translate/nuxeo-aspera/4/en-fr).\n\nThe Crowdin GitHub Actions workflow handles automatic translations and related pull requests.\n\n# About Nuxeo\n\nThe [Nuxeo Platform](http://www.nuxeo.com/products/content-management-platform/) is an open source customizable and extensible content management platform for building business applications. It provides the foundation for developing [document management](http://www.nuxeo.com/solutions/document-management/), [digital asset management](http://www.nuxeo.com/solutions/digital-asset-management/), [case management application](http://www.nuxeo.com/solutions/case-management/) and [knowledge management](http://www.nuxeo.com/solutions/advanced-knowledge-base/). You can easily add features using ready-to-use addons or by extending the platform using its extension point system.\n\nThe Nuxeo Platform is developed and supported by Nuxeo, with contributions from the community.\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with\nSaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris.\nMore information is available at [www.nuxeo.com](http://www.nuxeo.com).\n",
        "digest": "3ccdae4ac085aaa2ecfd225806b81b71",
        "encoding": "UTF-8",
        "length": 7878,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2021.7.1"
    }
  ],
  "creationDate": 1723459723568,
  "key": "Nuxeo Platform-2021.58",
  "name": "Nuxeo Platform",
  "operations": [
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Aspera",
      "contributingComponent": "com.nuxeo.aspera.connector.operations",
      "description": "Get children blobs' digests and filename to start download from a document(s).",
      "hierarchyPath": "/op:Aspera.GetChildrenBlobs",
      "label": "Get Children Blobs",
      "name": "Aspera.GetChildrenBlobs",
      "operationClass": "com.nuxeo.aspera.connector.operations.GetChildrenBlobs",
      "params": [
        {
          "description": null,
          "isRequired": false,
          "name": "childrenType",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "folderId",
          "order": 0,
          "type": "document",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "xpath",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "document",
        "blob"
      ],
      "url": "Aspera.GetChildrenBlobs",
      "version": "2021.58.6"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Aspera",
      "contributingComponent": "com.nuxeo.aspera.connector.operations",
      "description": "Create batch and store batch context",
      "hierarchyPath": "/op:Aspera.InitBatchUpload",
      "label": "Initialize Batch Upload",
      "name": "Aspera.InitBatchUpload",
      "operationClass": "com.nuxeo.aspera.connector.operations.InitBatchUpload",
      "params": [],
      "signature": [
        "void",
        "string"
      ],
      "url": "Aspera.InitBatchUpload",
      "version": "2021.58.6"
    },
    {
      "@type": "NXOperation",
      "aliases": [],
      "category": "Fetch",
      "contributingComponent": "com.nuxeo.aspera.connector.operations",
      "description": "Same than page provider but filtering docs on rights",
      "hierarchyPath": "/op:Aspera.PageProvider",
      "label": "PageProvider",
      "name": "Aspera.PageProvider",
      "operationClass": "com.nuxeo.aspera.connector.operations.AsperaPageProvider",
      "params": [
        {
          "description": null,
          "isRequired": true,
          "name": "providerName",
          "order": 0,
          "type": "string",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "currentPageIndex",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "pageSize",
          "order": 0,
          "type": "integer",
          "values": [],
          "widget": null
        },
        {
          "description": null,
          "isRequired": false,
          "name": "queryParams",
          "order": 0,
          "type": "stringlist",
          "values": [],
          "widget": null
        }
      ],
      "signature": [
        "void",
        "list",
        "void",
        "documents"
      ],
      "url": "Aspera.PageProvider",
      "version": "2021.58.6"
    }
  ],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "com.nuxeo.aspera.connector.nuxeo-aspera-core",
        "org.nuxeo.ecm.restapi.jaxrs.aspera",
        "nuxeo-aspera-web"
      ],
      "conflicts": [],
      "dependencies": [
        "amazon-s3-online-storage",
        "nuxeo-web-ui"
      ],
      "hierarchyPath": "/nuxeo-aspera-2021.7.1",
      "id": "nuxeo-aspera-2021.7.1",
      "name": "nuxeo-aspera",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Aspera Connector",
      "version": "2021.7.1"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1723459723568,
  "version": "2021.58"
}